#ifndef __PERMISSIONUTILS__H__
#define __PERMISSIONUTILS__H__

#include "fileutils.h"

#include <sys/stat.h>

typedef struct _permission {
    bool isRead;
    bool isWrite;
    bool isExecute;
    struct stat st;
} Permission;

static void setPermission(Permission *perm, bool isread, bool iswrite, bool isexec);
bool initPermission(const char *path, Permission *perm);
// bool permissionToString(const char *path, char *buffer);

// Utils:
// Read Permission
bool isReadPermission(const char *path);
bool isWritePermission(const char *path);
bool isExecutePermission(const char *path);

// Write Permission

bool setReadPermission(const char *path);
bool setWritePermission(const char *path);
bool setExecutePermission(const char *path);



bool permissionToString(const Permission perm, char *buffer);
bool permissionToStringWithPath(const char *path, char *buffer);

#endif  //!__PERMISSIONUTILS__H__


// 文件权限控制函数
// 函数               说明
// ┌──────────────────────────────────────────────────────────────────────────────┐
// │ access()        判断是否具有存取文件的权限                                        │
// │ alphasort()     依字母顺序排序目录结构                                           │
// │ chdir()         改变当前的工作目录                                               │
// │ chmod()         修改文件权限                                                    │
// │ chown()         改变文件所有者                                                  │
// │ chroot()        改变文件根目录                                                  │
// │ closedir()      关闭目录                                                       │
// │ fchdir()        改变当前工作目录                                                │
// │ fchmod()        修改文件的权限                                                  │
// │ fchown()        改变文件的所有者                                                 │
// │ fstat()         由文件描述词取得文件状态                                          │
// │ ftruncate()     改变文件大小                                                    │
// │ getcwd()        取得当前的工作目录                                               │
// │ link()          建立文件连接                                                    │
// │ lstat()         由文件描述词取得文件状态                                          │
// │ opendir()       打开目录函数                                                    │
// │ readdir()       读取目录函数                                                    │
// │ readlink()      取得符号连接所指的文件                                            │
// │ rewinddir()     重设读取目录的位置为开头位置                                       │
// │ seekdir()       设置下回读取目录的位置                                            │
// │ stat()          获取文件状态                                                    │
// │ symlink()       建立文件符号连接                                                 │
// │ telldir()       取得目录流的读取位置                                              │
// │ truncate()      改变文件大小                                                    │
// │ umask()         设置建立新文件时的权限遮罩                                        │
// │ unlink()        删除文件                                                       │
// │ utime()         修改文件的存取时间和更改时间                                      │
// │ utimes()        修改文件的存取时间和更改时间                                      │
// └──────────────────────────────────────────────────────────────────────────────┘

